﻿using System;
using System.Collections.Generic;
using System.Linq;
using Persistencia;
using SearchServer.AppManager;
using SearchServer.UI.Utilidades;

namespace SearchServer.UI
{
    public partial class Busqueda : System.Web.UI.Page
    {
        private bool _permiteAlmacenarBusqueda = false;

        protected void Page_Load(object sender, EventArgs e)
        {
            Usuario user = (Usuario) Session["Usuario_SIT"];
            if (user != null && Utilidades.Utilidades.ValidarUsuarioSesion(user))
            {
                BarraNavegacion.Text = Utilidades.Utilidades.CargarLinksVentana(user);
                if (Request.QueryString["submit"] != null && Request.QueryString["submit"]=="Buscar")
                {
                    String termino = Request.QueryString["field"].Trim();
                    if (!String.IsNullOrEmpty(termino))
                    {
                        _permiteAlmacenarBusqueda = PermiteAlmacenarBusqueda(user);
                        CargarGrillaBusqueda(termino);
                        LogManager log = LogManager.GetInstancia();
                        log.LogBusquedaRealizada(user, termino);
                    }
                }
                if (Request.Form["operacion"] != null && Request.Form["operacion"] == "AlmacenarBusqueda")
                {
                    String termino = Request.Form["termino"];
                    UserManager userMgr = UserManager.GetInstancia();
                    Persistencia.Busqueda busqueda = new Persistencia.Busqueda();
                    busqueda.Fecha_Creacion = Utilidades.Utilidades.GetFechaCreacion();
                    busqueda.Fecha_Ultima_Modificacion = busqueda.Fecha_Creacion;
                    busqueda.Texto = termino;
                    busqueda.Usuario = user.Id;
                    try
                    {
                        userMgr.AlmacenarBusqueda(user.Id, busqueda);
                    }
                    catch (Exception)
                    {
                        ClientScript.RegisterStartupScript(GetType(), "Error", "<script language=\"javaScript\">" + "alert('No se pudo almacenar la busqueda');" + "window.location.href='Busqueda.aspx';" + "<" + "/script>");
                    }

                }
            }
            else
            {
                Response.Redirect("Login.aspx",false);
            }
        }

        /// <summary>
        /// Verifica si el usuario puede almacenar busquedas
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        private static bool PermiteAlmacenarBusqueda(Usuario user)
        {
            if (user.Rol != null)
            {
                return user.Rol.Where(rol => rol.Funcionalidad != null).SelectMany(rol => rol.Funcionalidad).Any(funcionalidad => funcionalidad.Texto_Descripcion == FuncionalidadesTipos.AlmacenarBusqueda);
            }
            return false;
        }


        /// <summary>
        /// Metodo crea la grilla de resultados del termino buscado
        /// </summary>
        /// <param name="termino"></param>
        private void CargarGrillaBusqueda(String termino)
        {
            List<FileSystemElement> listaResultados;
            //TODO          
            FileSystemElementManager fseMgr = new FileSystemElementManager();
            listaResultados = fseMgr.BuscarFileSystemElements(termino);
            //Cargar la lista de resultados de la busqueda
            //listaResultados = new List<FileSystemElement>();
            //FileSystemElement f = new FileSystemElement();
            //f.Nombre = "_0319Paola-Juan Ignacio_2";
            //f.Path = @"\\CASA-PC\amigas";
            //f.Extension = "JPG";
            //f.Fecha_Creacion = DateTime.Now;
            //f.Id = 1;
            //f.Is_File = true;
            //f.Tamaño = 154000;
            //listaResultados.Add(f);
            //FileSystemElement f1 = new FileSystemElement();
            //f1.Nombre = "amigas";
            //f1.Path = @"\\CASA-PC";
            //f1.Fecha_Creacion = DateTime.Now;
            //f1.Id = 2;
            //f1.Is_File = false;
            //listaResultados.Add(f1);
            //
            btnAlmacenarBusqueda.Text = "";
            tablaResultados.Text = "";
            //Cabezal de la tabla
            tablaResultados.Text += @"<tr>";
            tablaResultados.Text += @"<td class='gridHeader' style='text-align: center;width: 25%'>";
            tablaResultados.Text += @"Nombre";
            tablaResultados.Text += @"</td>";
            tablaResultados.Text += @"<td class='gridHeader' style='text-align: center;width:30%;'>";
            tablaResultados.Text += @"Path";
            tablaResultados.Text += @"</td>";
            tablaResultados.Text += @"<td class='gridHeader' style='text-align: center;width: 15%'>";
            tablaResultados.Text += @"Tamaño";
            tablaResultados.Text += @"</td>";
            tablaResultados.Text += @"<td class='gridHeader' style='text-align: center;width: 20%'>";
            tablaResultados.Text += @"Fecha creacion";
            tablaResultados.Text += @"</td>";
            tablaResultados.Text += @"<td class='gridHeader' colspan=2 style='width:10%'>";
            tablaResultados.Text += @"</td>";
            tablaResultados.Text += @"</tr>";
            //Fila para cada Distribucion
            int numero = 0;
            foreach (FileSystemElement fileSystemElement in listaResultados)
            {
                if (numero % 2 == 0)
                {
                    //PAR
                    tablaResultados.Text += @"<tr class='gridItem'>";
                }
                else
                {
                    //IMPAR
                    tablaResultados.Text += @"<tr class='gridAlternatingItem'>";
                }
                tablaResultados.Text += @"<td style='text-align:left; padding-left:5px;'>";
                tablaResultados.Text += fileSystemElement.Nombre + @"." + fileSystemElement.Extension;
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"<td width='50%'>";
                tablaResultados.Text += fileSystemElement.Path.Replace("\\" + fileSystemElement.Nombre + "." + fileSystemElement.Extension, "");
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"<td style='text-align:center; vertical-align:middle;'>";
                if (fileSystemElement.Is_File)
                {
                    tablaResultados.Text += fileSystemElement.Tamaño + @" bytes";
                }
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"<td style='text-align:center; vertical-align:middle;'>";
                tablaResultados.Text += fileSystemElement.Fecha_Creacion.ToString();
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"<td valign='middle'>";
                var path = @fileSystemElement.Path;
                path =  path.Replace("\\", @"/");

                path = path.Replace(@"//", @"file" + @"://///");
                if (fileSystemElement.Is_File)
                {
                    var file = path + @"/" + fileSystemElement.Nombre + "." + fileSystemElement.Extension;
                    tablaResultados.Text += @"<a href='" + file + @"' onclick='abrirArchivo(this.href);return false;' ><img src='Imagenes/btnFile.png'/></a>";
                }
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"<td valign='middle'>";
                tablaResultados.Text += @"<a href='" + path + @"' onclick='abrirArchivo(this.href);return false;'><img src='Imagenes/btnFolder.png'/></a>";
                tablaResultados.Text += @"</td>";
                tablaResultados.Text += @"</tr>";
                numero += 1;
            }
            if (_permiteAlmacenarBusqueda)
            {
                btnAlmacenarBusqueda.Text += @"<form action='Busqueda.aspx' method='post'>";
                btnAlmacenarBusqueda.Text += @"<tr style='text-align:right;'>";
                btnAlmacenarBusqueda.Text += @"<td valign='middle'>";
                btnAlmacenarBusqueda.Text += @"<input type='hidden' id='termino' name='termino' value = '" + termino + @"'/ >";
                btnAlmacenarBusqueda.Text += @"<input type='hidden' id='operacion' name='operacion' value = 'AlmacenarBusqueda'/ >";
                btnAlmacenarBusqueda.Text += @"<input type='image' src='Imagenes/btnSave.jpg' onsubmit='submit-form();'/>";
                btnAlmacenarBusqueda.Text += @"</td>";
                btnAlmacenarBusqueda.Text += @"</tr>";
                btnAlmacenarBusqueda.Text += @"</form>";
            }
        }

    }
}